iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0

在介紹比特幣區塊鏈時,我只提到一個區塊中會有hash和previous hash,previous hash是前一個區塊的hash,將前一個區塊的hash作為下一個區塊的previous hash,形成區塊鏈的連接,今天我們要來好好了解一下hash是甚麼?

什麼是hash?hash會將你輸入的任意長度的數據轉換成一個唯一而且固定長度的hash輸出值,hash函數有兩個很重要的特性,第一點,它是一個單向的函數,你只能將輸入轉換得到輸出,不能將輸出轉換回去得到輸入,這感覺就像是煮熟的雞蛋不能再變回生蛋的狀態,第二點,它具有「無碰撞」(collision-free)的特性,我們很難找到兩個不同數據卻產生出相同的hash,即使你輸入的數據只有微小的差異,也會產生完全不同的hash輸出值,現在最常見的是SHA-256演算法,無論放進任何的輸入,經由hash 函數後輸出的hash大小都是256 bits,因為生成兩個相同的256位hash值機率非常低,這樣能確保hash值的唯一性。
https://ithelp.ithome.com.tw/upload/images/20190923/201208146ynTcnx09f.jpg
大概就會長成這個樣子!

記得我在上一篇介紹公鑰私鑰時,提到的驗證數位簽名的hash吧!hash只要有一點點的修改,也會長的截然不同。

既然提到SHA-256就不得不提一下工作量證明機制(PoW),之前提過工作量證明機制(PoW)是一種運算的競爭,礦工透過運算資源解決難題,就可以得到建立新區塊的權利,所以說這個難題是甚麼?就是算出滿足條件的hash值。怎樣是一個滿足條件的hash值,我們可以參考難度值(Difficulty),它代表礦工需要經過多少次運算才能產生一個滿足條件的區塊,難度值會根據所有人的運算能力進行相應的調整,比特幣區塊大約每10分鐘生成一個,因為hash值是由數字和大小寫字母組成,每一位都有62種可能性(26個大寫字母加上26個小寫字母,再加上10個數字),假如第一位是0,我們要做62次hash運算才會出現第一位是0的情況,如果前面兩位是0,就要嘗試62的平方次hash運算,所以要找到滿足難度值的hash 值,需要大量的運算,所以工作量證明機制(PoW)就是算力越大,權利(新區塊)越大
https://ithelp.ithome.com.tw/upload/images/20190923/20120814Gz9dAv9NA9.jpg
大概就會長成這個樣子!
計算hash 值時,會用到一個只能使用一次的隨機數(nounce),來去找找出符合條件的區塊 hash 值,如果不符合條件,就換下一個nonce值,重新運算。

當礦工算出滿足條件(難度值)的 hash值時,會廣播給大家,其他礦工只要驗證這個hash值是不是符合難度值,驗證通過就打包(我看大家都說打包,應該就是加入吧~)到區塊鏈中。

這就是為什麼共識機制演算法(PoW)難以運算,卻容易驗證的原因,hash可以採用Merkle Tree機制設計,下一篇我將介紹Merkle Tree和區塊的組成,那我們明天見~


上一篇
DAY11 甚麼是非對稱密鑰加密?
下一篇
DAY13 甚麼是Merkle Tree Hash?
系列文
商管學生如何從零開始學習區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言